home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / pcgames / EMERGY / DX5SDK / SDK / SAMPLES / WORMHOLE / readme.txt
Text File  |  1997-07-14  |  3KB  |  117 lines

  1. (NOTE: this file contains extended ASCII and may not appear
  2.        correctly if your font does not support extended ASCII
  3.        characters.  This file will appear correctly in the
  4.        MS-DOS Editor.)
  5.  
  6. This effect uses palette animation.
  7.  
  8. Here is how it works:
  9.  
  10. Imagine a 4x4 display using 4 colors.  We could set the colors
  11. up to look something like this:
  12.  
  13.    1 2 3 4
  14.    1 2 3 4
  15.    1 2 3 4
  16.    1 2 3 4
  17.  
  18. Now we can cycle all of the colors in each row to the right. (The
  19. one on the right will wrap-around to the left.)
  20.  
  21.    4 1 2 3
  22.    4 1 2 3
  23.    4 1 2 3
  24.    4 1 2 3
  25.  
  26. If we continue this cycling we would get animated lines moving
  27. to the right.  The same can be done to animate the lines going
  28. down. i.e.
  29.  
  30.    1 1 1 1      4 4 4 4
  31.    2 2 2 2  ->  1 1 1 1
  32.    3 3 3 3  ->  2 2 2 2
  33.    4 4 4 4      3 3 3 3
  34.  
  35. Now if we expand our palette to 16 color we can combine moving
  36. down and right at the same time.
  37.  
  38.    Move right:
  39.  
  40.        1  2  3  4       4  1  2  3
  41.        5  6  7  8  ->   8  5  6  7
  42.        9 10 11 12  ->  12  9 10 11
  43.       13 14 15 16      16 13 14 15
  44.  
  45.    Move down:
  46.  
  47.        1  2  3  4      13 14 15 16
  48.        5  6  7  8  ->   1  2  3  4
  49.        9 10 11 12  ->   5  6  7  8
  50.       13 14 15 16       9 10 11 12
  51.  
  52.    Move right and down:
  53.  
  54.        1  2  3  4       4  1  2  3      16 13 14 15
  55.        5  6  7  8  ->   8  5  6  7  ->   4  1  2  3
  56.        9 10 11 12  ->  12  9 10 11  ->   8  5  6  7
  57.       13 14 15 16      16 13 14 15      12  9 10 11
  58.  
  59. Now if you tile these 4x4 blocks end to end and cycle the colors
  60. as above, you get a moving checkerboard.
  61.  
  62.     
  63.     ▓▒░ ▓▒░ ▓▒░ ▓▒░       ░ ▓▒░ ▓▒░ ▓▒░ ▓▒      ▓▒░ ▓▒░ ▓▒░ ▓▒░  
  64.     ▒░ ▓▒░ ▓▒░ ▓▒░ ▓       ▓▒░ ▓▒░ ▓▒░ ▓▒░      ▒░ ▓▒░ ▓▒░ ▓▒░ ▓
  65.     ░ ▓▒░ ▓▒░ ▓▒░ ▓▒      ▓▒░ ▓▒░ ▓▒░ ▓▒░       ░ ▓▒░ ▓▒░ ▓▒░ ▓▒
  66.      ▓▒░ ▓▒░ ▓▒░ ▓▒░  ->  ▒░ ▓▒░ ▓▒░ ▓▒░ ▓  ->   ▓▒░ ▓▒░ ▓▒░ ▓▒░
  67.     ▓▒░ ▓▒░ ▓▒░ ▓▒░   ->  ░ ▓▒░ ▓▒░ ▓▒░ ▓▒  ->  ▓▒░ ▓▒░ ▓▒░ ▓▒░  
  68.     ▒░ ▓▒░ ▓▒░ ▓▒░ ▓       ▓▒░ ▓▒░ ▓▒░ ▓▒░      ▒░ ▓▒░ ▓▒░ ▓▒░ ▓
  69.     ░ ▓▒░ ▓▒░ ▓▒░ ▓▒      ▓▒░ ▓▒░ ▓▒░ ▓▒░       ░ ▓▒░ ▓▒░ ▓▒░ ▓▒
  70.      ▓▒░ ▓▒░ ▓▒░ ▓▒░      ▒░ ▓▒░ ▓▒░ ▓▒░ ▓       ▓▒░ ▓▒░ ▓▒░ ▓▒░ 
  71.  
  72.  
  73. Wormhole does the same thing, except it uses 15x15 blocks (225
  74. colors) and instead of tiling the blocks end to end on a flat
  75. plane, it tiles them in 3D converging at the center of the
  76. wormhole.
  77.  
  78. The following code will generate the 3D wormhole using the 
  79. aforementioned 15x15 grids.
  80.  
  81. //Do all the work!
  82. //convert r,theta,z to x,y,x to screen x,y
  83. //plot the point
  84. //z=-1.0+(log(2.0*j/DIVS) is the line that sets the math eqn for plot
  85. //Feel free to try other functions!
  86. //Cylindrical coordinates, i.e. z=f(r,theta)
  87.  
  88. #define STRETCH 25
  89. #define PI      3.14159265358979323846
  90. #define XCENTER 160
  91. #define YCENTER 50
  92. #define DIVS    1200
  93. #define SPOKES  2400
  94.  
  95. void transarray(void)
  96.     {
  97.     float x,y,z;
  98.     int i,j,color;
  99.     for(j=1;j<DIVS+1;j++)
  100.         for(i=0;i<SPOKES;i++)
  101.             {
  102.             z=-1.0+(log(2.0*j/DIVS));
  103.             x=(320.0*j/DIVS*cos(2*PI*i/SPOKES));
  104.             y=(240.0*j/DIVS*sin(2*PI*i/SPOKES));
  105.             y=y-STRETCH*z;
  106.             x+=XCENTER;
  107.             y+=YCENTER;
  108.             color=((i/8)%15)+15*((j/6)%15)+1;
  109.             if ((x>=0)&&(x<=320)&&(y>=0)&&(y<=200))
  110.                 plot((int) x,(int) y,color);
  111.             }
  112.     }
  113.  
  114. After loading the bitmap to a direct draw surface, all that is
  115. left to do is rotate the colors and you have a wormhole!
  116.  
  117.